package com.demo.core.service.base;

import java.util.Date;
import java.util.List;

import com.demo.core.model.Role;

/**
 * 角色服务
 * 
 * @author ryuu.kk
 */
public interface RoleService {

	/**
	 * 存储一个角色
	 * @param role 角色模型
	 * @return 角色外键ID
	 */
	Long save(Role role);
	
	/**
	 * 角色是否存在
	 * @param id 角色ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 更新角色名和描述
	 * @param id 角色ID
	 * @param name 角色
	 * @param title 角色名
	 * @param description 描述
	 */
	void update(Long id, String name, String title, String description);
	
	/**
	 * 删除一个角色
	 * @param roleId 角色外键ID
	 */
	void delete(Long roleId);
	
	/**
	 * 更新角色类型
	 * @param roleId 角色外键ID
	 * @param type 角色类型
	 */
	void changeType(Long roleId, String type);
	
	/**
	 * 改变角色优先级
	 * @param roleId 角色ID
	 * @param priority 优先级
	 */
	void changePriority(Long roleId, int priority);
	
	/**
	 * 更新可用状态
	 * @param roleId 角色外键ID
	 * @param expireDay 有效期限
	 * @param enabled 是否有效
	 */
	void valid(Long roleId, Date expireDay, boolean enabled);
	
	/**
	 * 检索角色模型对象
	 * @param roleId 角色外键ID
	 * @return 角色对象模型
	 */
	Role find(Long roleId);
	
	/**
	 * 查找角色模型对象
	 * @param siteId 站点外键ID
	 * @param roleName 角色名称
	 * @return 角色对象模型
	 */
	Role find(Long siteId, String roleName);
	
	/**
	 * 查找角色模型对象列表
	 * @param siteId 站点外键ID
	 * @return 角色
	 */
	List<Role> findList(Long siteId);
	
	/**
	 * 查询所有角色模型对象列表
	 * @return 角色模型对象列表
	 */
	List<Role> findAll();

}